package test230603;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/6/3 20:11
 * 1567. 乘积为正数的最长子数组的长度
 * https://leetcode.cn/problems/maximum-length-of-subarray-with-positive-product/
 */
public class Solution01 {

    public int getMaxLen(int[] nums) {
        int n = nums.length;
        int[] f = new int[n + 1];  // f[i] i 位置结尾且乘积为正数的子数组的最大长度
        int[] g = new int[n + 1];  // g[i] i 位置结尾且乘积为负数的子数组的最大长度
        // 动态规划迭代过程
        int ret = Integer.MIN_VALUE;  // 记录结果
        for (int i = 1; i <= n; ++i) {
            if (nums[i - 1] > 0) {
                // 如果当前位置为正数
                f[i] = f[i - 1] + 1;
                g[i] = g[i - 1] == 0 ? 0 : g[i - 1] + 1;
            } else if (nums[i - 1] < 0) {
                // 如果当前位置为负数
                f[i] = g[i - 1] == 0 ? 0 : g[i - 1] + 1;
                g[i] = f[i - 1] + 1;
            }
            ret = Math.max(ret, f[i]);
        }
        return ret;
    }
}
